package cn.gene.timeyan.security.sso.service;

import cn.gene.timeyan.common.restful.JsonResult;
import cn.gene.timeyan.pojo.ums.model.User;
import cn.gene.timeyan.pojo.valid.security.dto.UpdatePwdDTO;
import cn.gene.timeyan.pojo.valid.security.dto.UserCodeLoginDTO;
import cn.gene.timeyan.pojo.valid.security.dto.validateCodeDTO;
import cn.gene.timeyan.pojo.valid.security.model.UserValidation;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;

/**
 * 验证码服务类*
 *
 * @author LWG
 * @date 2022/8/1 21:36
 * @since 1.0.0 @gene.cn
 */
public interface IUserValidationService extends IService<UserValidation> {
    /**
     * 将验证码发送到用户邮箱
     *
     * @param userID 用户id，通过该值来查找用户，在用户中查找到邮箱后发送验证邮件
     *               之后将验证码值存储到用户对象中
     * @return 发送成功返回0 找不到邮箱返回1
     */
    /*void sendEmail(int userID);*/

    /**
     * 将验证码发送到手机
     *
     * @param userId
     * @return 发送成功返回0 手机号码格式有问题返回1
     */
    void sendSms(int userId);

    /**
     * 负责校验用户验证码，给其他方法调用
     *
     * @param validateCodeDTO
     * @return 成功返回0和查找到的user对象，其余情况user对象返回空，找不到用户返回1，验证码错误返回2
     */
    User validateCode(validateCodeDTO validateCodeDTO);

    /**
     * 将验证码发送到用户邮箱
     *
     * @param email 要发送验证码的邮箱
     */
    /*void sendEmailForLogin(String email);*/

    /**
     * 将验证码发送到手机
     *
     * @param phone 要发送验证码的手机
     */
    void sendSmsForLogin(String phone);

    JsonResult<String> sendCodeByPhone(String phone);
    JsonResult<String> sendCodeByEmail(String email);

    JsonResult<String> checkCode(UserCodeLoginDTO userCodeLoginDTO);

    JsonResult<String> updatepwd(UpdatePwdDTO updatePwdDTO, HttpServletRequest request);
}
